package com.adisi.bd;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import com.adisi.objetos.Reserva;

public class ReservaDatos {

	
	private Connection con = null;
	
	private Coneccion coneccion;

	
	public ReservaDatos() {
		super();
		
		coneccion = new Coneccion();
	}

	public ReservaDatos(Coneccion coneccion) {
		super();
		
		this.coneccion = coneccion;
	}

	
	public int guardarReserva(Reserva reserva) throws Exception {
			
			CallableStatement sp = null;
			
			int ok = 0;

			try {
				
				con = coneccion.conectar();
				sp = con.prepareCall("{? = call sp_Reserva_Insert(?,?,?,?,?,?)}");
				
				/*
					 @id_cliente int 
					,@fecha_hora datetime
					,@delta_aviso datetime
					,@direccion_origen varchar(300)
					,@direccion_destino varchar(300)
					,@id_usuario int
				 */
				sp.registerOutParameter(1, java.sql.Types.INTEGER);
				
				sp.setInt("id_cliente", reserva.getCliente().getIdCliente());
				sp.setDate(	"fecha_hora", new java.sql.Date(reserva.getFechaHoraInicio().getTime()));
				sp.setInt("delta_aviso", reserva.getAntelacion());
				sp.setString("direccion_origen", reserva.getOrigen().toString());
				sp.setString("direccion_destino", reserva.getDestino().toString());
				sp.setInt("id_usuario", reserva.getIdUsuario());
								
				sp.execute();  
				
				reserva.setIdReserva(sp.getInt(1));
				
				ok = sp.getInt(1);
				
			} catch (SQLException e) {
				throw e;
			} catch (Exception e) {
				throw e;
			} finally {
				try {
					sp.close();
					con.close();
				} catch (SQLException e) {
					throw e;
				}
			}
			return ok;
		
		
	}

}
